from collections import defaultdict

def build_graph(equations, values):
    # 创建一个默认字典，用于存储图
    graph = defaultdict(dict)
    # 遍历方程和对应的值
    for (A, B), value in zip(equations, values):
        # 将A到B的边权重设置为value
        graph[A][B] = value
        # 将B到A的边权重设置为1/value
        graph[B][A] = 1 / value
    # 返回图
    return graph

def greedy_solution(start, end, graph):
    # 如果起始点或终点不在图中，则返回-1.0
    if start not in graph or end not in graph:
        return -1.0
    # 如果起始点与终点相同，则返回1.0
    if start == end:
        return 1.0
    # 初始化队列，将起始点加入队列，并设置初始值为1.0
    queue = [(start, 1.0)]
    # 初始化已访问集合，将起始点加入集合
    visited = set()
    # 当队列不为空时，循环执行以下操作
    while queue:
        # 从队列中取出当前点和值
        current, value = queue.pop(0)
        # 如果当前点为终点，则返回值
        if current == end:
            return value
        # 将当前点加入已访问集合
        visited.add(current)
        # 遍历当前点的邻居
        for neighbor in graph[current]:
            # 如果邻居不在已访问集合中，则将邻居加入队列，并更新值
            if neighbor not in visited:
                queue.append((neighbor, value * graph[current][neighbor]))
    # 如果队列为空，则返回-1.0
    return -1.0

# 定义一个函数，用于计算方程的值
def calc_equation(equations, values, queries):
    # 构建图
    graph = build_graph(equations, values)
    # 初始化结果列表
    results = []
    # 遍历查询列表
    for C, D in queries:
        # 对每个查询，使用贪心算法求解
        results.append(greedy_solution(C, D, graph))
    # 返回结果列表
    return results
